package com.iweb.manager;

import com.iweb.entity.Cat;
import com.iweb.entity.Dog;
import com.iweb.entity.Penguin;
import com.iweb.entity.Pet;
import com.iweb.util.Const;

import java.util.Scanner;

/**
 * 主人类
 */
public class Master {
    Scanner scanner = new Scanner(System.in);
    /*主人姓名*/
    public String name = "匿名玩家";
    /*金币*/
    public int money = 10000;
    /*宠物格子*/
    public Pet[] pets = new Pet[4];

    /*初始化数据*/
    public void initData(){    //多态，父类类型引用子类对象
        pets[0] = new Dog("小白",100,0,0,"萨摩耶");  //通过有参构造传递参数
        pets[1] = new Penguin("妞妞",100,0,0,"Q妹");   //通过有参构造传递参数
    }

    /*充值功能*/
    public void recharge(){
        System.out.println("1.充100得1万金币 2.充300得4万金币 3.充800得12万金币");
        System.out.println("请选择充值序号:");
        int n = scanner.nextInt();
        switch (n){       //判断输入序号
            case 1:
                System.out.println("充值成功，到账1万金币");  //输入为1，就充值1万金币
                this.money += 10000;
                break;
            case 2:                                         //输入为2，就充值4万金币
                System.out.println("充值成功，到账4万金币");
                this.money += 40000;
                break;
            case 3:                                         //输入为3，就充值12万金币
                System.out.println("充值成功，到账12万金币");
                this.money += 120000;
                break;
            default:                                        //如果没输以上序号，就充值失败
                System.out.println("充值失败");
                return;                                     //方法结束
        }
    }

    /*领养新宠物*/
    public void getNewPet(){
        if (this.money < 3000){             //先判断金币够不够
            System.out.println("金币不足，请充值");
            recharge();                     //调用充值方法
            return;                         //直接退出
        }
        if (pets[pets.length-1] != null){      //再判断格子够不够，如果数组最后一个位置不为null，说明格子满了
            System.out.println("没有多余存宠物的格子，请增加格子");
            addPetGrid();                     //调用扩展格子方法
            return;                           //直接退出
        }
        Pet pet = null;                      //定义一个Pet类型变量
        System.out.println("请选择领养的宠物类型:1.宠物狗 2.宠物企鹅 3.宠物猫");
        int c = scanner.nextInt();           //定义变量c存储输入序号
        System.out.println("请输入宠物的昵称:");
        String nickName = scanner.next();    //自定义宠物狗昵称
        switch (c){                          //判断输入序号
            case 1:
                System.out.println("请输入宠物狗的品种:");  //输入为1，就领养宠物狗
                Const.showDogStrains();             //显示宠物狗的品种
                int s = scanner.nextInt();         //定义变量s存储输入序号
                String strain = Const.DOG_STRAINS[s-1];     //存储输入的序号对应的宠物狗品种
                pet = new Dog(nickName,100,0,0,strain);
                break;        //跳出switch
            case 2:
                System.out.println("请输入宠物企鹅的品种:"); //输入为2，就领养宠物企鹅
                Const.showPenguinSex();   //显示宠物企鹅的性别
                int x = scanner.nextInt();   //定义变量x存储输入序号
                String sex = Const.PENGUIN_SEX[x-1];   //存储输入序号对应的宠物企鹅性别
                pet = new Penguin(nickName,100,0,0,sex);
                break;   //跳出switch
            case 3:
                System.out.println("请输入宠物猫的颜色:"); //输入为3，就领养宠物猫
                Const.showCatColor();   //显示宠物猫的颜色
                int t = scanner.nextInt();   //定义变量x存储输入序号
                String color = Const.CAT_COLOR[t-1];   //存储输入序号对应的宠物猫颜色
                pet = new Cat(nickName,100,0,0,color);
                break;   //跳出switch
        }
        for (int i = 0;i<pets.length;i++){
            if (pets[i]==null){      //依次判断哪个宠物格子为空，将宠物存到格子(宠物数组)中
                pets[i] = pet;
                break;
            }
        }
        System.out.println("领养成功，宠物信息:");
        pet.show();    //显示已有宠物信息
    }

    /*扩展宠物格子*/
    public void addPetGrid(){
        if (this.money<5000){    //先判断金币够不够扩展格子
            System.out.println("金币不足，请充值");
            recharge();    //调用充值方法
            return;    //方法结束
        }
        Pet[] newPets = new Pet[pets.length+1];    //扩容数组
        for (int i = 0;i<pets.length;i++){
            newPets[i] = pets[i];              //旧数组的内容赋给新数组
        }
        pets = newPets;        //再将新数组赋给旧数组
        System.out.println("扩展宠物格子成功！金币-5000");
        this.money -= 5000;
    }

    /*显示所有宠物信息*/
    public void displayPets(){
        for (Pet pet:pets){    //增强for循环
            if (pet!=null){    //判断宠物是否存在
                pet.show();     //显示存在的宠物
                System.out.println("******我是分割线******");
            }
        }
    }

    /*喂食宠物*/
    public void feedPet(){
        System.out.println("请选择您要喂养的宠物");
        String nickName = scanner.next();
        Pet pet = null;
        for (int i = 0;i<pets.length;i++) {
            if (pets[i] == null){      //先判断是否有宠物
                continue;     //为空就继续下轮循环
            }
            if (nickName.equals(pets[i].getNickName())){
                pet = pets[i];        //再判断输入的昵称是否有吻合
                break;         //找到宠物则跳出循环
            }
        }
        if (pet == null){
            System.out.println("查无此宠物");
            return;
        }
        System.out.println("是否开始喂养 y/n");
        String answer = scanner.next();
        while (answer.equals("y")){      //判断是否喂养
            if (this.money<1000){     //判断金币够不够喂养宠物
                System.out.println("金币不足，请充值");
                recharge();            //调用充值方法
                return;           //方法结束
            }
            if (pet.eat()){
                this.money -= 1000;    //如果eat方法返回true代表能成功喂养，就减1000金币
            }else{
                return;           //如果不能成功喂养，就结束方法
            }
            System.out.println("是否继续喂养 y/n");
            answer = scanner.next();
        }
    }

    /*升级宠物*/
    public void upLevelPet(){
        System.out.println("请选择您要升级的宠物");
        String nickName = scanner.next();
        Pet pet = null;
        for (int i = 0;i<pets.length;i++){
            if (pets[i] == null){    //先判断哪些格子有宠物
                continue;
            }
            if (nickName.equals(pets[i].getNickName())){
                pet = pets[i];            //再判断输入的昵称是否有吻合
                break;            //跳出循环
            }
        }
        if (pet == null){
            System.out.println("查无此宠物");
            return;
        }
        System.out.println("是否开始玩游戏升级 y/n");
        String answer = scanner.next();
        while(answer.equals("y")){            //先判断是否要玩游戏
            if (this.money<1000){             //判断金币够不够玩游戏
                System.out.println("金币余额不足，请充值");
                recharge();            //调用充值方法
                return;
            }
            if (pet.play()){
                this.money -= 1000;    //如果play方法返回true就能成功玩游戏，金币减1000

            }else{
                return;     //不能玩游戏就结束方法
            }
            System.out.println("是否继续升级 y/n");
            answer = scanner.next();
        }
        System.out.println("退出升级");

    }


}
